home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 11
/
FM Towns Free Software Collection 11.iso
/
t_os
/
game
/
cdr_100
/
cdr_100.bas
< prev
next >
Wrap
BASIC Source File
|
1995-07-08
|
21KB
|
522 lines
10 '★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
20 '
30 ' << CAR DOG R >> - Version 1.00 -
40 '
50 '----------------------------------------------------------------
60 ' Programed by KAMA
70 '★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
80 '
90 *初期設定:'######################################################
100 CLS:CLEAR:RANDOMIZE TIME:DEFINT H-N
110 CNFFILE$="cdr_100.cnf":RNKFILE$="cdr_100.rnk"
120 TMODE=INP(&H5EC)
130 ON ERROR GOTO *エラー処理
140 OPEN "I",1,CNFFILE$:INPUT #1,MODE,WT:CLOSE
150 *コンフィグファイル作成から復帰
160 OUT &H5EC,MODE
170 GOSUB *変数設定1
180 GOSUB *ランキングファイルのオープン:GOSUB *ランキングファイルのロード
190 GOSUB *パターン設定
200 *復帰地点
210 GOSUB *タイトル画面
220 *ラウンドスタート
230 GOSUB *マップ紹介
240 GOSUB *変数設定2
250 GOSUB *画面設定
260 GOSUB *マップ読み込み
270 GOSUB *キャラクタ設定
280 GOSUB *スクロール:GOSUB *キャラクタ表示
290 GOSUB *レーススタート
300 *メインルーチン:'################################################
310 WHILE DD=0
320 PD=PAD(1):PT=PTRIG(1) :'パッド読み取り
330 GOSUB *スリップ処理
340 MH=(MH+((PD=7)-(PD=3))*PHN)AND 255 :'方向決定
350 XN=CN(MH)*PAA:YN=SN(MH)*PAA
360 IF PT=1 THEN VX=VX+XN:VY=VY+YN :'アクセル
370 VV=SQR(VX^2+VY^2):IF VV>PVX THEN VV=PVX :'速度決定
380 X1=0:Y1=0:X2=VX:Y2=VY:GOSUB *方向チェック
390 IF PT=2 THEN BR=PBR ELSE BR=PEB :'ブレーキ
400 VX=CN(HK)*VV*BR:VY=SN(HK)*VV*BR :'移動量
410 MPX=MPX+VX/PZZ:MPY=MPY+VY/PZZ :'マップ座標変更
420 GOSUB *当たり判定
430 MHI=MH+4 AND 255:MHP=INT(MHI/8) :'表示キャラ決定
440 GOSUB *キャラクタ表示
450 IF GOAL=1 THEN
460 GPOINT=GPOINT+1:IF GPOINT>100 THEN *ゴール
470 ELSE IF GOAL=-1 THEN
480 SPRITE 6,216,4,0:TIM=TIM+1
490 SPOINT=SPOINT+1:IF SPOINT>30 THEN SPRITE 0,216,0:GOAL=0
500 ELSE
510 TIM=TIM+1:IF TIM>9999 THEN WAIT 100:GOTO *ゲームオーバー
520 ENDIF
530 IF PT=4 THEN GOSUB *ポーズ
540 IF WT<>0 THEN
550 FOR I=0 TO WT*300:NEXT
560 ENDIF
570 GOSUB *スクロール
580 WEND
590 PCMPLAY DOKAN%:WAIT 100
600 *ゲームオーバー:'################################################
610 WHILE PTRIG(1)=0:WEND
620 CLS:SCREEN@ 1:PUT@A(0,0)-(39,29),MPT,PSET,8,8
630 SYMBOL (23,70),"GAME OVER",2,2,7,0,PSET,9
640 SYMBOL (115,150),"PUSH BUTTON",1,1,[0,150,0],0,PSET,9
650 PCMPLAY GAMOV%:WAIT 200
660 WHILE PTRIG(1)=0:WEND
670 IF PTRIG(1)>=8 THEN
680 GOTO *タウンズOSに戻る
690 ENDIF
700 PLAY "t280v8o4c16":WAIT 100:GOTO *復帰地点
710 END
720 '### サブルーチン ###############################################
730 *当たり判定:'----------------------------------------------------
740 XO=X:YO=Y:X=(MPX)\16+20:Y=(MPY)\16+15:GET@A(X,Y)-(X,Y),MPC
750 IF MPC(0)=&H5299 THEN
760 VX=-VX:VY=-VY
770 PCMPLAY KAN%
780 ELSE IF MPC(0)=&H4504 OR MPC(0)=&H4104 OR MPC(0)=&H2104 THEN
790 DD=1
800 ELSE IF MPC(0)=&H3904 OR MPC(0)=&H3D04 OR MPC(0)=&H5504 THEN
810 DD=1
820 ELSE IF MPC(0)=&H318F THEN
830 VX=VX/1.2!:VY=VY/1.2!
840 ELSE
850 A=ABS(VV+HDL)\5000:IF A>20 THEN A=20
860 IF A<>0 THEN PASTEL A:LINE (XO,YO)-(X,Y),PASTEL,[50-A,50-A,50-A]:'タイヤの跡をつける
870 IF A=0 THEN
880 IF GOAL=0 THEN PLAY OFF
890 ELSE IF PLAY(2)=0 AND A>0 THEN
900 PCMPLAY SLIP%:VX=VX*.99!:VY=VY*.99!
910 ENDIF
920 '--- ラップの判定 ---------------------------------------------
930 CHKOLD=CHK
940 IF MPX<4759 AND MPX>=3759 AND MPY>3088 THEN
950 CHK=2:'----- まだゴールしてない
960 ELSE IF MPX<3759 AND MPX>=2759 AND MPY>3088 THEN
970 CHK=1:'----- ライン越えた
980 ELSE
990 CHK=0:'----- その他の場所
1000 ENDIF
1010 IF CHKOLD=2 AND CHK=1 THEN
1020 IF GLAP=0 THEN
1030 LAP=LAP+1:PLAY "t280v15o5c16"
1040 IF LAP>=MLAP THEN
1050 PCMPLAY GOAL%:GOAL=1:GPOINT=0
1060 SPRITE 6,232,90,100:SPRITE 0,232,1
1070 ELSE IF LAP=MLAP-1 THEN
1080 GOSUB *ラップ消去:SPRITE 0,248,1
1090 ELSE
1100 GOSUB *ラップ消去:SPRITE 0,312+LAP*12,1
1110 ENDIF
1120 ELSE
1130 GLAP=0
1140 ENDIF
1150 ELSE IF CHKOLD=1 AND CHK=2 THEN
1160 GLAP=1
1170 ENDIF
1180 '--------------------------------------------------------------
1190 ENDIF
1200 RETURN
1210 *ラップ消去
1220 FOR I=0 TO 4
1230 SPRITE 0,312+I*12,0
1240 NEXT
1250 RETURN
1260 *スリップ処理:'--------------------------------------------------
1270 IF PT=2 AND VV>100 THEN
1280 HDL=HDL+1000
1290 ELSE IF PD=7 OR PD=3 THEN
1300 HDL=HDL+500
1310 ELSE
1320 HDL=HDL-3000:IF HDL<0 THEN HDL=0
1330 ENDIF
1340 IF HDL>30000 THEN HDL=30000
1350 RETURN
1360 *方向チェック:'--------------------------------------------------
1370 XA=INT(X2-X1):YA=INT(Y2-Y1)
1380 IF XA<>0 THEN
1390 YX=YA/XA:AT=ATN(YX)
1400 HK=((AT*256)/(3.14159!*2))+64 AND &HFE
1410 IF X1>X2 THEN HK=HK+128 AND &HFE
1420 ELSE
1430 HK=0:IF Y1<Y2 THEN HK=128
1440 ENDIF
1450 RETURN
1460 *キャラクタ表示:'------------------------------------------------
1470 DEF SPRITE 1,100,(PX,PY),4*MHP,1,1
1480 SPRITE 0,100,1
1490 '--- タイムのスプライト設定
1500 A1=TIM\1000:A2=(TIM-A1*1000)\100
1510 A3=(TIM-A1*1000-A2*100)\10:A4=TIM-A1*1000-A2*100-A3*10
1520 DEF SPRITE 1, 0,( 0,206),128+A1*4
1530 DEF SPRITE 1, 4,(16,206),128+A2*4
1540 DEF SPRITE 1, 8,(32,206),128+A3*4
1550 DEF SPRITE 1,12,(48,206),128+A4*4
1560 SPRITE 0,0,1:SPRITE 0,4,1:SPRITE 0,8,1:SPRITE 0,12,1
1570 RETURN
1580 *ポーズ:'--------------------------------------------------------
1590 PLAY "t280v10o5c16d16e16f16g16":WAIT 30
1600 *PAUSEROOP
1610 IF PTRIG(1)>7 THEN *復帰地点
1620 IF PTRIG(1)<>4 THEN *PAUSEROOP
1630 PLAY "t280v10o5c16d16e16f16g16":WAIT 30
1640 RETURN
1650 *ゴール:'--------------------------------------------------------
1660 WAIT 100:SPRITE 0,232,1:WHILE PTRIG(1)=0:WEND
1670 CLS:SCREEN@ 1:PUT@A(0,0)-(39,29),MPT,PSET,8,8
1680 SYMBOL (23,60),"Your time is"+STR$(TIM),2,2,7,0,PSET,9
1690 IF TIM<RTM(COURSE-1) THEN
1700 RTM(COURSE-1)=TIM
1710 SYMBOL (20,100),"This is BEST TIME!",2,2,[100,230,100],0,PSET,9
1720 GOSUB *ネームエントリー
1730 ENDIF
1740 SYMBOL (115,210),"PUSH BUTTON",1,1,[0,150,0],0,PSET,9
1750 WHILE PTRIG(1)=0:WEND
1760 PLAY "t280v8o4c16":WAIT 100:GOTO *復帰地点
1770 *レーススタート:'------------------------------------------------
1780 SPRITE 0,300,1:SPRITE 0,312,1
1790 SPRITE 6,200,460,100:SPRITE 0,200,1:PCMPLAY READY%
1800 FOR I=0 TO 142 STEP 2:SPRITE 6,200,2,0:WAIT 1:NEXT
1810 WAIT 50:SPRITE 0,200,0:GOAL=-1:SPOINT=0
1820 SPRITE 6,216,90,100:SPRITE 0,216,1:PCMPLAY START%
1830 RETURN
1840 *変数設定1:'####################################################
1850 DIM MPT(3071),MPC(0),PAT%(255)
1860 DIM SN(255),CN(255)
1870 DIM RNA$(9),RTM(9),CH$(70)
1880 DIM PATG1%(1024),PATG2%(1072)
1890 DEF FNBR=.0245436926062#
1900 FOR KA=0 TO 255:SN(KA)=SIN(FNBR*(KA-64)):CN(KA)=COS(FNBR*(KA-64)):NEXT
1910 DIM SLIP%(4550),KAN%(1500),LETSGO%(5300)
1920 DIM DOKAN%(5300),GAMOV%(4900),BYE%(4600)
1930 DIM GOAL%(4600),READY%(2700),START%(2600)
1940 LOAD@ "slip.snd",SLIP%
1950 LOAD@ "kan.snd",KAN%
1960 LOAD@ "letsgo.snd",LETSGO%
1970 LOAD@ "dokan.snd",DOKAN%
1980 LOAD@ "gamov.snd",GAMOV%
1990 LOAD@ "byebye.snd",BYE%
2000 LOAD@ "goal.snd",GOAL%
2010 LOAD@ "ready.snd",READY%
2020 LOAD@ "go.snd",START%
2030 MN1=0
2040 FOR I=0 TO 9:CH$(I)=CHR$(48+I):NEXT
2050 FOR I=0 TO 25:CH$(10+I)=CHR$(65+I):NEXT
2060 A$=" !#$%&'()*+,-./:;<=>?[\]^_・{|}~ "
2070 FOR I=1 TO 32:CH$(35+I)=MID$(A$,I,1):NEXT
2080 RETURN
2090 *タイトル画面:'##################################################
2100 CLS:SCREEN@ 1
2110 LINE (0,0)-(639,479),PSET,[40,40,80],BF
2120 SYMBOL (30,30),"CAR DOG R",2,4,[230,230,230],0,PSET,9
2130 SYMBOL (120,120),"GAME START",1,1,[0,150,0],0,PSET,9
2140 SYMBOL (120,140),"RANKING",1,1,[0,150,0],0,PSET,9
2150 SYMBOL (120,160),"CONFIGRATION",1,1,[0,150,0],0,PSET,9
2160 SYMBOL (120,180),"QUIT",1,1,[0,150,0],0,PSET,9
2170 SYMBOL(60,210),"1995 KAMA presents",1,1,[220,140,240],0,PSET,9
2180 SYMBOL(100,120+MN1*20),"★",1,1,[230,250,100],,PSET
2190 OUT &HFDA0,&HF,1
2200 START=0:WHILE START<>1 :'パッド待ち
2210 PD=PAD(1):PT=PTRIG(1)
2220 IF PD=1 THEN
2230 SYMBOL(100,120+MN1*20),"★",1,1,[40,40,80],,PSET
2240 MN1=MN1-1:IF MN1=-1 THEN MN1=3
2250 SYMBOL(100,120+MN1*20),"★",1,1,[230,250,100],,PSET
2260 PLAY "t280v8o4c16":WAIT 15
2270 ELSE IF PD=5 THEN
2280 SYMBOL(100,120+MN1*20),"★",1,1,[40,40,80],,PSET
2290 MN1=MN1+1:IF MN1=4 THEN MN1=0
2300 SYMBOL(100,120+MN1*20),"★",1,1,[230,250,100],,PSET
2310 PLAY "t280v8o4c16":WAIT 15
2320 ENDIF
2330 IF PT=1 OR PT=2 OR PT=4 THEN
2340 IF MN1=0 THEN START=1
2350 IF MN1=1 THEN *ランキング表示
2360 IF MN1=2 THEN *コンフィグレーション
2370 IF MN1=3 THEN *タウンズOSに戻る
2380 ENDIF
2390 WEND
2400 COURSE=1:PCMPLAY LETSGO%:WAIT 200
2410 RETURN
2420 *コンフィグレーション:'##########################################
2430 MN2=3:LINE (0,0)-(639,479),PSET,[40,40,80],BF
2440 SYMBOL (70,30),"CONFIGRATION",1,2,7,0,PSET,9
2450 SYMBOL (100,100),"動作モード",1,1,7,0,PSET,9
2460 IF MODE=1 THEN MD$="高速" ELSE MD$="互換"
2470 SYMBOL (200,100),MD$,1,1,7,0,PSET,9
2480 SYMBOL (100,130),"WAIT TIME",1,1,7,0,PSET,9
2490 IF WT<10 THEN WT$=" "+STR$(WT) ELSE WT$=STR$(WT)
2500 SYMBOL (200,130),WT$,1,1,7,0,PSET,9
2510 SYMBOL (100,160),"設定をセーブする",1,1,7,0,PSET,9
2520 SYMBOL (100,190),"タイトルに戻る",1,1,7,0,PSET,9
2530 SYMBOL(80,100+MN2*30),"★",1,1,[230,250,100],,PSET
2540 START=0:WHILE START<>1
2550 PD=PAD(1):PT=PTRIG(1)
2560 IF PD=1 THEN
2570 SYMBOL(80,100+MN2*30),"★",1,1,[40,40,80],,PSET
2580 MN2=MN2-1:IF MN2=-1 THEN MN2=3
2590 SYMBOL(80,100+MN2*30),"★",1,1,[230,250,100],,PSET
2600 PLAY "t280v8o4c16":WAIT 15
2610 ELSE IF PD=5 THEN
2620 SYMBOL(80,100+MN2*30),"★",1,1,[40,40,80],,PSET
2630 MN2=MN2+1:IF MN2=4 THEN MN2=0
2640 SYMBOL(80,100+MN2*30),"★",1,1,[230,250,100],,PSET
2650 PLAY "t280v8o4c16":WAIT 15
2660 ENDIF
2670 IF (PD=3 OR PD=7) AND MN2=0 THEN
2680 IF MODE=0 THEN MODE=1 ELSE MODE=0
2690 IF MODE=1 THEN MD$="高速" ELSE MD$="互換"
2700 LINE (200,100)-(231,115),PSET,[40,40,80],BF
2710 SYMBOL (200,100),MD$,1,1,7,0,PSET,9
2720 OUT &H5EC,MODE
2730 PLAY "t280v8o4c16":WAIT 15
2740 ELSE IF PD=3 AND MN2=1 THEN
2750 WT=WT+1:IF WT>99 THEN WT=99
2760 IF WT<10 THEN WT$=" "+STR$(WT) ELSE WT$=STR$(WT)
2770 LINE (200,130)-(231,145),PSET,[40,40,80],BF
2780 SYMBOL (200,130),WT$,1,1,7,0,PSET,9:WAIT 8
2790 ELSE IF PD=7 AND MN2=1 THEN
2800 WT=WT-1:IF WT<0 THEN WT=0
2810 IF WT<10 THEN WT$=" "+STR$(WT) ELSE WT$=STR$(WT)
2820 LINE (200,130)-(231,145),PSET,[40,40,80],BF
2830 SYMBOL (200,130),WT$,1,1,7,0,PSET,9:WAIT 8
2840 ELSE IF PT=1 AND MN2=2 THEN
2850 PLAY "t280v8o5g8c8"
2860 KILL CNFFILE$:OPEN "O",1,CNFFILE$:PRINT#1,MODE,WT:CLOSE #1
2870 ELSE IF PT=1 AND MN2=3 THEN
2880 START=1
2890 ENDIF
2900 WEND:WAIT 20:GOTO *復帰地点
2910 *変数設定2:'####################################################
2920 DD=0:TIM=0 :'ゲームオ-バーのフラグ
2930 LAP=0:GLAP=1:CHK=2:GOAL=0 :'ラップとフラグ
2940 PX=119:PY=116:MH=192 :'プレイヤーの座標、方向
2950 MPX=3808:MPY=3344 :'マップの座標
2960 X=(MPX)\16+20:Y=(MPY)\16+15 :'スリップ用の座標
2970 VV=10:VX=0:VY=0:PAA=400! :'速度、x成分、y成分、加速度
2980 PVX=2800!:PZZ=72! :'速度の上限、底上げ分
2990 PHN=8:PEB=.975!:PBR=.93! :'ハンドル、エアブレーキ、ブレーキ
3000 MHI=MH+4 AND 255:MHP=INT(MHI/8):'プレイヤー表示用の方向
3010 RETURN
3020 *画面設定:'######################################################
3030 SCREEN@ 1:CLS:SPRITE ON:SPRITE SCREEN(0,0):SPRITE SCREEN 1
3040 WINDOW(0,0)-(383,255):VIEW(0,0)-(383,255)
3050 OUT &H440,&H1B,1:OUT &H442,&H3F,1
3060 RETURN
3070 *マップ読み込み:'################################################
3080 IF COURSE=1 THEN LOAD@ "cdr_map1.tif",(80,0)
3090 IF COURSE=2 THEN LOAD@ "cdr_map2.tif",(80,0)
3100 IF COURSE=3 THEN LOAD@ "cdr_map3.tif",(80,0)
3110 IF COURSE=4 THEN LOAD@ "cdr_map4.tif",(80,0)
3120 RETURN
3130 *マップ紹介:'####################################################
3140 SCREEN@ 1:WINDOW(0,0)-(383,255):VIEW(0,0)-(383,255)
3150 WR=1:START=0:WHILE START<>1
3160 IF WR=1 THEN
3170 IF COURSE=1 THEN
3180 MLAP=4:LOAD@ "cdr_map1.tif",(0,0)
3190 SYMBOL(50,60),"Course 1: 恐山スピードウェイ",1,1,7,0,PSET,9
3200 SYMBOL(140,110),"4周",1,1,7,0,PSET,9
3210 SYMBOL(60,150),"BEST TIME "+STR$(RTM(0))+" "+RNA$(0),1,1,7,0,PSET,9
3220 ELSE IF COURSE=2 THEN
3230 MLAP=3:LOAD@ "cdr_map2.tif",(0,0)
3240 SYMBOL(50,60),"Course 2: 八甲田F1サーキット",1,1,7,0,PSET,9
3250 SYMBOL(140,110),"3周",1,1,7,0,PSET,9
3260 SYMBOL(60,150),"BEST TIME "+STR$(RTM(1))+" "+RNA$(1),1,1,7,0,PSET,9
3270 ELSE IF COURSE=3 THEN
3280 MLAP=4:LOAD@ "cdr_map3.tif",(0,0)
3290 SYMBOL(50,60),"Course 3: 竜飛岬スピードウェイ",1,1,7,0,PSET,9
3300 SYMBOL(140,110),"4周",1,1,7,0,PSET,9
3310 SYMBOL(60,150),"BEST TIME "+STR$(RTM(2))+" "+RNA$(2),1,1,7,0,PSET,9
3320 ELSE IF COURSE=4 THEN
3330 MLAP=4:LOAD@ "cdr_map4.tif",(0,0)
3340 SYMBOL(50,60),"Course 4: 岩木山F1サーキット",1,1,7,0,PSET,9
3350 SYMBOL(140,110),"4周",1,1,7,0,PSET,9
3360 SYMBOL(60,150),"BEST TIME "+STR$(RTM(3))+" "+RNA$(3),1,1,7,0,PSET,9
3370 ENDIF
3380 SYMBOL(30,190),"←→でコース選択",2,2,[230,250,100],0,PSET,8
3390 WAIT 30
3400 ENDIF
3410 PD=PAD(1):PT=PTRIG(1)
3420 WR=0:IF PD=3 THEN
3430 COURSE=COURSE+1:IF COURSE=5 THEN COURSE=1
3440 PLAY "t280v8o4c16":WR=1:WAIT 15
3450 ELSE IF PD=7 THEN
3460 COURSE=COURSE-1:IF COURSE=0 THEN COURSE=4
3470 PLAY "t280v8o4c16":WR=1:WAIT 15
3480 ELSE IF PT=1 THEN
3490 PLAY "t280v8o4c16":START=1
3500 ELSE IF PT>=8 THEN
3510 GOTO *復帰地点
3520 ENDIF
3530 WEND
3540 RETURN
3550 'スプライト設定##################################################
3560 *パターン設定:'--------------------------------------------------
3570 SCREEN@ 1:CLS:OUT &HFDA0,&H3,1
3580 LOAD@ "sprite.tif",(0,0):DEF SPRITE 99,0
3590 FOR I=0 TO 31
3600 X=I*16+(I>15)*256
3610 Y=-(I>15)*16
3620 GET@A(X,Y)-(X+15,Y+15),PAT%:TOUMEI=0:GOSUB *透明化
3630 DEF SPRITE 0,I*4,PAT%,1:'---- 車のパターン(0-124)
3640 NEXT
3650 '--- 文字の設定 -------------------------------------------------
3660 CLS:LINE(0,0)-(319,239),PSET,1,BF
3670 SYMBOL (0, 0),"0123456789",1,1,7,0,PSET,9
3680 SYMBOL (0,20)," Ready Go!!! Goal! Final ",1,1,6,0,PSET,9
3690 SYMBOL (0,40)," LAP 1st 2nd 3rd 4th 5th ",1,1,6,0,PSET,9
3700 FOR I=0 TO 9
3710 GET@A (I*16,0)-(I*16+15,15),PAT%:TOUMEI=31:GOSUB *透明化
3720 DEF SPRITE 0,128+I*4,PAT%,1:'---- 数字のパターン(128-164)
3730 NEXT
3740 FOR I=0 TO 15
3750 GET@A (I*16,20)-(I*16+15,35),PAT%:TOUMEI=31:GOSUB *透明化
3760 DEF SPRITE 0,168+I*4,PAT%,1:'---- メッセージのパターン(168-228)
3770 NEXT
3780 FOR I=0 TO 17
3790 GET@A (I*16,40)-(I*16+15,55),PAT%:TOUMEI=31:GOSUB *透明化
3800 DEF SPRITE 0,232+I*4,PAT%,1:'---- ラップのパターン(232-300)
3810 NEXT
3820 CLS
3830 RETURN
3840 *キャラクタ設定:'------------------------------------------------
3850 DEF SPRITE 1,100,(PX,PY),4*MHP :'---- プレイヤー(100)
3860 FOR I=0 TO 3
3870 DEF SPRITE 1,200+I*16,(0,0),168+I*16,4,1:'--- 200,+16,*3
3880 NEXT
3890 SPRITE 6,248,30,18
3900 FOR I=0 TO 5
3910 DEF SPRITE 1,300+I*12,(-30*(I<>0),18),232+I*12,3,1:'300,+12,*5
3920 NEXT
3930 RETURN
3940 *透明化:'--------------------------------------------------------
3950 FOR J=0 TO 255
3960 IF PAT%(J)=TOUMEI THEN PAT%(J)=-32768 :'---- 透明色
3970 NEXT
3980 RETURN
3990 *スクロール:'####################################################
4000 GET@A(MPX\16,MPY\16)-(MPX\16+39,MPY\16+29),MPT
4010 PUT@A(0,0)-(39,29),MPT,PSET,2,2
4020 RETURN
4030 *ランキングファイルのオープン:'##################################
4040 OPEN "R",2,RNKFILE$
4050 FIELD 2,8 AS NA$,8 AS NB$
4060 IF LOF(2)<2 THEN
4070 RESTORE *ランキングファイルのデフォルト
4080 FOR I=0 TO 3
4090 READ RNA$(I),RTM(I)
4100 NEXT
4110 GOSUB *ランキングファイルのセーブ
4120 ENDIF
4130 RETURN
4140 *ランキング表示:'################################################
4150 MN3=1
4160 LINE (0,0)-(639,479),PSET,[40,40,80],BF
4170 LINE(4,18)-(315,168),PSET,[80,80,0],BF
4180 LINE(8,22)-(311,164),PSET,[100,100,0],BF
4190 SYMBOL(24,30),"--------- RANKING ---------",1,1,6,0,PSET,1
4200 SYMBOL(40,60),"Course Time Player",1,1,6,0,PSET,1
4210 FOR I=0 TO 3
4220 A1=RTM(I)\1000:A2=(RTM(I)-A1*1000)\100
4230 A3=(RTM(I)-A1*1000-A2*100)\10:A4=RTM(I)-A1*1000-A2*100-A3*10
4240 TIM$=CHR$(48+A1)+CHR$(48+A2)+CHR$(48+A3)+CHR$(48+A4)
4250 SYMBOL( 48,80+I*20),STR$(I+1),1,1,6,0,PSET,1
4260 SYMBOL(120,80+I*20),TIM$,1,1,6,0,PSET,1
4270 SYMBOL(216,80+I*20),RNA$(I),1,1,6,0,PSET,1
4280 NEXT
4290 SYMBOL (100,180),"ランキングをセーブする",1,1,7,0,PSET,1
4300 SYMBOL (100,200),"タイトルに戻る",1,1,7,0,PSET,1
4310 SYMBOL (80,180+MN3*20),"★",1,1,[230,250,100],0,PSET,1
4320 START=0:WHILE START<>1 :'パッド待ち
4330 PD=PAD(1):PT=PTRIG(1)
4340 IF PD=1 OR PD=5 THEN
4350 SYMBOL (80,180+MN3*20),"★",1,1,[40,40,80],0,PSET,1
4360 IF MN3=1 THEN MN3=0 ELSE MN3=1
4370 SYMBOL (80,180+MN3*20),"★",1,1,[230,250,100],0,PSET,1
4380 PLAY "t280v8o4c16":WAIT 15
4390 ELSE IF PT=1 THEN
4400 IF MN3=0 THEN
4410 PLAY "t280v8o5g8c8"
4420 GOSUB *ランキングファイルのセーブ:WAIT 20
4430 ELSE
4440 START=1
4450 ENDIF
4460 ENDIF
4470 WEND
4480 WAIT 10:GOTO *復帰地点
4490 *ネームエントリー:'##############################################
4500 RNA$(COURSE-1)="":NM=10:NNN=0:'Nm=文字の種類,nnn=入力した文字数
4510 GET@A(146,170)-(176,201),PATG1%
4520 SYMBOL(146,170),CH$(NM),3,2,6,0,PSET,1
4530 SYMBOL(127,152),"________",1,1,6,0,PSET,1
4540 GET@A(127,150)-(193,165),PATG2%
4550 '
4560 START=0:WHILE START<>1
4570 OT=PT:PD=PAD(1):PT=PTRIG(1)
4580 IF PD=1 OR PD=7 THEN
4590 NM=NM-1:IF NM<0 THEN NM=66
4600 PUT@A(146,170)-(176,201),PATG1%
4610 SYMBOL(146,170),CH$(NM),3,2,6,0,PSET,1:WAIT 9
4620 ELSE IF PD=5 OR PD=3 THEN
4630 NM=NM+1:IF NM>66 THEN NM=0
4640 PUT@A(146,170)-(176,201),PATG1%
4650 SYMBOL(146,170),CH$(NM),3,2,6,0,PSET,1:WAIT 9
4660 ELSE IF PT=1 AND PT<>OT AND NNN<8 THEN
4670 RNA$(COURSE-1)=RNA$(COURSE-1)+CH$(NM):NNN=NNN+1
4680 PUT@A(127,150)-(193,165),PATG2%
4690 SYMBOL(127,150),RNA$(COURSE-1),1,1,6,0,PSET,1
4700 PLAY "t280v8o4c16"
4710 ELSE IF PT=2 AND PT<>OT AND NNN>0 THEN
4720 NNN=NNN-1
4730 RNA$(COURSE-1)=LEFT$(RNA$(COURSE-1),NNN)
4740 PUT@A(127,150)-(193,165),PATG2%
4750 SYMBOL(127,150),RNA$(COURSE-1),1,1,6,0,PSET,1
4760 PLAY "t280v8o4c16"
4770 ELSE IF PT=4 OR (PT=1 AND PT<>OT AND NNN=8) THEN
4780 PLAY"t280v10o5c16d16e16f16g16"
4790 WAIT 100
4800 START=1
4810 ENDIF
4820 WEND
4830 RETURN
4840 *ランキングファイルのロード:'####################################
4850 FOR I=1 TO 4
4860 GET 2,I
4870 RNA$(I-1)=NA$:RTM(I-1)=VAL(NB$)
4880 NEXT
4890 RETURN
4900 *ランキングファイルのセーブ:'####################################
4910 FOR I=1 TO 4
4920 LSET NA$=RNA$(I-1):LSET NB$=STR$(RTM(I-1))
4930 PUT 2,I
4940 NEXT
4950 RETURN
4960 *タウンズOSに戻る:'############################################
4970 SYMBOL (40,60),"Bye!",4,7,[230,250,100],0,PSET,9
4980 PCMPLAY BYE%:WAIT 200:OUT &H5EC,TMODE
4990 END
5000 *エラー処理:'####################################################
5010 IF ERR=63 THEN
5020 OPEN "O",1,CNFFILE$
5030 MODE=0:WT=1 :'初期状態(互換、wait=1)
5040 PRINT #1,MODE,WW
5050 CLOSE
5060 RESUME *コンフィグファイル作成から復帰
5070 ELSE
5080 BEEP:CLS:SCREEN@ 0
5090 LOCATE 23,11:PRINT "予測出来ないエラーが起こりました"
5100 LOCATE 24,13:PRINT ERL;"行。エラーナンバー";ERR;"です。"
5110 LOCATE 8,14:PRINT "エラーナンバーについてはF-BAISC386V2.1のマニュアルを見てください。"
5120 LOCATE 19,16:PRINT "パッドのボタンでTOWNS-OSに戻ります。"
5130 WHILE PTRIG(1)=0:WAIT 1:WEND
5140 ENDIF
5150 END
5160 *ランキングファイルのデフォルト:'################################
5170 'DATA rna$, rtm
5180 DATA "IKENO.I ", 9999
5190 DATA "HIROFUMI", 9999
5200 DATA "HARUHIKO", 9999
5210 DATA "HIROTO.K", 9999